package com.gestion.controlador;

import com.gestion.dao.FabricaDAO;
import com.gestion.modelo.dominio.Cliente;
import java.util.List;

/**
 * @author Mauri@<itsoluciones.com.ar>
 */
public class ClienteControlador {

    private FabricaDAO fDao;

    /**
     * Controlador
     */
    public ClienteControlador() {
        // System.out.println(this.toString());
        fDao = new FabricaDAO();
    }

    /**
     *
     * @param id identificador
     * @param nombre nombre
     * @param apellido apellido
     * @param provincia provinvia
     * @param localidad localidad
     * @param direccion direccion postal
     * @throws Exception
     */
    public void insertarCliente(Long id, String nombre, String apellido, String provincia, String localidad, String direccion) throws Exception {
        Cliente cliente;
        //new Long(-1) es indistinto el id ya que este se genera autoincremental
        cliente = new Cliente(new Long(-1), nombre, apellido, provincia, localidad, direccion);
        try {
            fDao.getClienteDAO().insertar(cliente);
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }

    /**
     * Modifica los atributos de un Cliente ya existentes y los hace
     * persistentes
     *
     * @param id id del cliente que se desea modificar
     * @param nombre nombre a modificar
     * @param apellido apellido a modificar
     * @param provincia provincia a modificar
     * @param localidad localidad a modificar
     * @param direccion direccion a modificar
     * @throws Exception lanzada si ocurre un error durante la modificación
     */
    public void actualizarCliente(Long id, String nombre, String apellido, String provincia, String localidad, String direccion) throws Exception {
        Cliente cliente;
        cliente = new Cliente(id, nombre, apellido, provincia, localidad, direccion);
        try {
            fDao.getClienteDAO().modificar(cliente);
        } catch (Exception ex) {
            throw new Exception(ex.getMessage());
        }
    }

    /**
     * Retorna un Cliente
     *
     * @param valorId id del cliente a retornar
     * @return Retorna un Cliente
     */
    public Cliente dameClienteFila(Long valorId) {
        return dameClienteConId(valorId);
        //return fDao.getClienteDAO().getCliente(valorId);
    }

    /**
     * Retorna una lista con todos los Clientes
     *
     * @return Retorna una lista con todos
     */
    public List<Cliente> dameListaCliente() {
        return fDao.getClienteDAO().getTodos();
    }

    /**
     * Retorna un ciente
     *
     * @param id cliente del cliente
     * @return un Cliente
     */
    public Cliente dameClienteConId(Long id) {
        return fDao.getClienteDAO().getCliente(id);
    }
}
